模式定义

抽象工厂模式提供一个创建一系列相关或相关依赖对象的接口。

模式结构

抽象工厂模式包含以下角色:

  • AbstractFactory:抽象工厂
  • ConcreteFactory:具体工厂
  • AbstractProduct:抽象产品
  • Product:具体产品

代码实现

  • Engine接口

    1
    2
    3
    public interface Engine {
    void engine();
    }
  • Light接口

    1
    2
    3
    public interface Light {
    void light();
    }
  • BMWEngine

    1
    2
    3
    4
    5
    6
    public class BMWEngine implements Engine {
    @Override
    public void engine() {
    System.out.println("bmw engine");
    }
    }
  • BMWLight

    1
    2
    3
    4
    5
    6
    7
    public class BMWLight implements Light {
    @Override
    public void light() {
    System.out.println("bmw light");
    }
    }
  • AudiEngine

    1
    2
    3
    4
    5
    6
    public class AudiEngine implements Engine {
    @Override
    public void engine() {
    System.out.println("audi engine");
    }
    }
  • AudiLight

    1
    2
    3
    4
    5
    6
    public class AudiLight implements Light {
    @Override
    public void light() {
    System.out.println("audi light");
    }
    }
  • Factory接口

    1
    2
    3
    4
    public interface Factory {
    Engine createEngine();
    Light createLight();
    }
  • BMWFactory

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class BMWFactory implements Factory {
    @Override
    public Engine createEngine() {
    return new BMWEngine();
    }
    @Override
    public Light createLight() {
    return new BMWLight();
    }
    }
  • AudiFactory

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class AudiFactory implements Factory {
    @Override
    public Engine createEngine() {
    return new AudiEngine();
    }
    @Override
    public Light createLight() {
    return new AudiLight();
    }
    }
  • Test

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Test {
    public static void main(String[] args) {
    Factory factory = new AudiFactory();
    Engine engine = factory.createEngine();
    Light light = factory.createLight();
    engine.engine();
    light.light();
    }
    }

总结

  • 抽象工厂模式包含四个角色:
    • 抽象工厂用于声明生成抽象产品的方法
    • 具体工厂实现了抽象工厂声明的生成抽象产品的方法,生成一组具体产品,这些产品构成了一个产品族
    • 抽象产品为某种产品声明接口,在抽象产品中定义了产品的抽象业务方法
    • 具体产品定义具体工厂生成的具体产品对象,实现抽闲产品接口中定义的业务方法
  • 抽象工厂模式和工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构
  • 本文转自3.抽象工厂模式